package com.jl.easybuysys.service;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jl.easybuysys.mapper.EbProductMapper;
import com.jl.easybuysys.model.EbProduct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Service//证----service层
public class EbProductService {


    @Autowired
    private EbProductMapper ebProductMapper;
    /*分页查询商品信息
     * @param psize
     * @param limit
     * @return
     */
    public Page<EbProduct> list(int psize,int limit){//导包 alt+enter
        Page<EbProduct> page = new Page(psize,limit);
 //         page.addOrder(OrderItem.asc("age"));//排序
        return ebProductMapper.selectPage(page,null);
    }
    /*
    * 根据id查询商品信息
    * */
    public  EbProduct detail(int epId){
        return ebProductMapper.selectById(epId);

    }
    /*将商品放入到购物车---session*/
    public void addCar(int epId, HttpServletRequest request){
        //1.TODO　调用mapper获取商品对象
        EbProduct newProduct = ebProductMapper.selectById(epId);
        //2.TODO  创建购物车(session)
        HttpSession session = request.getSession();
        //3.TODO  得到集合?(1.创建 2.从session获取)
        Set<EbProduct> set = null;
        //3.1 先从购物车中获取袋子
       set = (Set<EbProduct>)session.getAttribute("car");
        if(set==null){
            set=new HashSet<>();
        }
        //4.TODO  将商品放入集合----List去重商品
//        list.add(newProduct); //导致同一个商品出现多次 要求：同一个商品出现一次，数量为3
        //标记法
        boolean flag = false;
        for (EbProduct oldEbProduct :set) {
            //判断set中是否存在新加入的购物车的商品
            if (newProduct.getEpId().equals(oldEbProduct.getEpId())) {//集合中存在
                oldEbProduct.setCount(oldEbProduct.getCount() + 1);
                flag = true;
                break;
            }
        }
        //4.2.将新添加的商品加入set集合
        if(!flag){
            set.add(newProduct);//必须实体类重写hashcode方法和equals方法
        }
        //5.TODO  将集合放入到购物车
        session.setAttribute("car",set);
    }
}
